<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UsuarioBO
 *
 * @author thales
 */
class ClienteBO {
    private $cliente;
    private $conn;
    
    public function __construct() {
        $this->conn     = DB::getConn();
        $this->cliente  = new ClienteVO;
    }
    
    /**
     * Método para retornar um objeto do tipo Usuario
     * 
     * @return objeto Usuario 
     */
    public function getCliente(){
        return $this->cliente;
    }
    
    
    /**
     * Método para pesquisaar o usuário pelo nome.
     * 
     * @param string $nome
     * @return type 
     */
    public static function pegarDadosPeloNome($nome){

        if (strlen($nome) < 3 ) {
            throw new UserException('Digite um nome, com mais de 03 (três) caracteres, para a pesquisa!');
        }
        
        $objClienteBO = new ClienteBO();
        
        $nome = $nome . '%';
        $email = $nome . '%';
        
        $objClienteBO->getCliente()->setNome($nome);
        $objClienteBO->getCliente()->setEmail($nome, false);

        $objClienteDAO = new ClienteDAO();
        
        $resultado = $objClienteDAO->pesquisarDados($objClienteBO);
        
        if ( empty ($resultado) ) {
            throw new UserException('Nenhum resultado encontrado!');
        }
     
        return $resultado;
    }
    
    public static function pegarDados($idCliente){
        
        if ( !is_numeric($idCliente) && $idCliente < 1 ) {
            throw new UserException('Cliente inválido!');
        }
        
        $objClienteBO = new ClienteBO();
        $objClienteBO->getCliente()->setId($idCliente);
        
        $objClienteDAO = new ClienteDAO();
        if ( !$objClienteDAO->pesquisar($objClienteBO) ){
            throw new UserException('Não foi possível pegar os dados do cliente!');
        }
        
        return $objClienteBO;
    }
    
    public static function getAllClientes(){
         $objClienteDAO = new ClienteDAO();
         $resultado = $objClienteDAO->getAll(); 
         if ( !$resultado ) {
             throw new UserException('Nenhum cliente encontrado');
         }
         
         return $resultado;
    }


    /**
     * Método responsável por adcionar um novo usuário.
     * 
     * @param string $nome
     * @param string $email
     * @param string $senha
     * @param integer $perfilId
     * @return boolean 
     */
    public function salvarCliente($nome, $email, $telefone, $celular, $cidade, $bairro, $uf,
                                  $cep, $complemento, $nascimento, $genero){
        
        $nascimento = implode('-', array_reverse(explode('/', $nascimento)));
        
        $this->getCliente()->setNome($nome);
        $this->getCliente()->setEmail($email);
        $this->getCliente()->setTelefone($telefone);
        $this->getCliente()->setCelular($celular);
        $this->getCliente()->setCidade($cidade);
        $this->getCliente()->setBairro($bairro);
        $this->getCliente()->setUf($uf);
        $this->getCliente()->setCep($cep);
        $this->getCliente()->setComplemento($complemento);
        $this->getCliente()->setNascimento($nascimento);
        $this->getCliente()->setGenero($genero);
        
        $objClienteDAO = new ClienteDAO();
        
        $this->conn->beginTransaction();
        
        if(!$objClienteDAO->salvar($this->getCliente())){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do cliente!');
        }
        
        $this->conn->commit();
        
        return true;
    }
    
    public function atualizarCliente($id, $nome, $email, $telefone, $celular, $cidade, $bairro,
                                     $uf, $cep, $complemento, $nascimento, $genero) {

        $nascimento = implode('-', array_reverse(explode('/', $nascimento)));
        
        $this->getCliente()->setId($id);
        $this->getCliente()->setNome($nome);
        $this->getCliente()->setEmail($email);
        $this->getCliente()->setTelefone($telefone);
        $this->getCliente()->setCelular($celular);
        $this->getCliente()->setCidade($cidade);
        $this->getCliente()->setBairro($bairro);
        $this->getCliente()->setUf($uf);
        $this->getCliente()->setCep($cep);
        $this->getCliente()->setComplemento($complemento);
        $this->getCliente()->setNascimento($nascimento);
        $this->getCliente()->setGenero($genero);

        $objClienteDAO = new ClienteDAO();
        
            
        
        $this->conn->beginTransaction();
        
        if ( !$objClienteDAO->alterar($this->getCliente()) ){
            $this->conn->rollBack();
            throw new UserException('Não foi possível salvar os dados do usuário!');
        }
        
        $this->conn->commit();

    }
    
    /**
     * Método que recebe o id do usuário e exclui o seu cadastro
     * 
     * @param integer $id 
     */
    public function excluirCliente($id){
        
       $objClienteVO = $this->getCliente();
       $objClienteVO->setId($id);
       
       $objClienteDAO = new ClienteDAO();
       
       //inicia transação
       $this->conn->beginTransaction();
       
       if ( !$objClienteDAO->excluir($objClienteVO) ){
           $this->conn->rollBack();
           throw new UserException('Não foi possível excluir o usuário!');
       }
       
       $this->conn->commit();
    }
}

?>
